﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Sql;
using System.Windows.Forms;
using ExceptionReporting;
using SmartHealthCare.Properties;

namespace SmartHealthCare.Frm
{
    public partial class FrmOptions : Form
    {
        public FrmOptions()
        {
            InitializeComponent();
            _tablaServidores = new DataTable();
        }

        private SqlDataSourceEnumerator _servidores;
        private DataTable _tablaServidores;

        private void FrmOptions_Load(object sender, EventArgs e)
        {
            RadioButton2CheckedChanged(this, null);
            _wb.Navigate(_txtDir.Text);
        }

        private void LoadServers()
        {
            Cursor = Cursors.WaitCursor;
            //
            _servidores = SqlDataSourceEnumerator.Instance;
            // Comprobamos que no se haya cargado ya el combobox
            if (_tablaServidores.Rows.Count == 0)
            {
                // Obtenemos un dataTable con la información sobre las instancias visibles
                // de SQL Server 2000 y 2005
                _tablaServidores = _servidores.GetDataSources();
                // Creamos una lista para que sea el origen de datos del combobox
                var listaServidores = new List<string>();
                // Recorremos el dataTable y añadimos un valor nuevo a la lista con cada fila
                foreach (DataRow rowServidor in _tablaServidores.Rows)
                {
                    // La instancia de SQL Server puede tener nombre de instancia 
                    //o únicamente el nombre del servidor, comprobamos si hay 
                    //nombre de instancia para mostrarlo
                    if (String.IsNullOrEmpty(rowServidor["InstanceName"].ToString()))
                        listaServidores.Add(rowServidor["ServerName"].ToString());
                    else
                        listaServidores.Add(rowServidor["ServerName"] + "\\" + rowServidor["InstanceName"]);
                }

                // Asignamos al origen de datos del combobox la lista con 
                // las instancias de servidores
                _cbServidor.DataSource = listaServidores;
            }
            //
            Cursor = Cursors.Default;
        }

        private void CbDataBaseDropDown(object sender, EventArgs e)
        {
            var server = _cbServidor.SelectedValue.ToString();
            if (server == null) return;
            //
            var listaBasesdatos = new List<string>();
            //
            Cursor = Cursors.WaitCursor;
            try
            {


                // Componemos la cadena de conexión con el servidor seleccionado 
                // con seguridad integrada
                // Si se conecta con usuario de SQL Server hay que cambiar 
                // la cadena de conexión

                var sqlcon = new System.Data.SqlClient.SqlConnectionStringBuilder();
                if (_rbDefaulUser.Checked)
                {
                    sqlcon.UserID = Settings.Default.DbUser;
                    sqlcon.Password = Settings.Default.DbPass;
                }
                else
                {
                    sqlcon.UserID = _txtUsuario.Text;
                    sqlcon.Password = _txtPassword.Text;
                }
                sqlcon.DataSource = server;
                sqlcon.IntegratedSecurity = false;
                sqlcon.InitialCatalog = "master";

                using (var con = new System.Data.SqlClient.SqlConnection(sqlcon.ConnectionString))
                {
                    // Abrimos la conexión
                    con.Open();
                    // Obtenemos los nombres de las bases de datos que haya en el servidor
                    // se pueden filtrar para no mostrar las bases de datos de sistema
                    const string select = "select name from sys.databases;";
                    // Obtenemos un dataReader con el resultado
                    var com = new System.Data.SqlClient.SqlCommand(select, con);
                    System.Data.SqlClient.SqlDataReader dr = com.ExecuteReader();

                    // Recorremos el dataReader y añadimos un elemento nuevo 
                    // por cada registro
                    if (dr != null)
                        while (dr.Read())
                        {
                            listaBasesdatos.Add(dr[0].ToString());
                        }
                    // Asignamos la lista de bases de datos como origen de datos del combobox
                    _cbDataBase.DataSource = listaBasesdatos;
                }

                _cbDataBase.SelectedIndex = -1;
            }
            catch (Exception ex)
            {
                var reporter = new ExceptionReporter();
                reporter.ReadConfig();
                reporter.Show(ex);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }

        private void CbServidorDropDown(object sender, EventArgs e)
        {
            LoadServers();
        }

        private void RadioButton2CheckedChanged(object sender, EventArgs e)
        {
            _txtPassword.Enabled = _rbSqlUser.Checked;
            _txtUsuario.Enabled = _rbSqlUser.Checked;
            _cbDataBase.DataSource = null;
        }

        private void BntRefresClick(object sender, EventArgs e)
        {
            LoadServers();
        }

        private void BntProbarClick(object sender, EventArgs e)
        {
            try
            {
                var sqlcon = new System.Data.SqlClient.SqlConnectionStringBuilder();
                if (_rbDefaulUser.Checked)
                {
                    sqlcon.UserID = Settings.Default.DbUser;
                    sqlcon.Password = Settings.Default.DbPass;
                }
                else
                {
                    sqlcon.UserID = _txtUsuario.Text;
                    sqlcon.Password = _txtPassword.Text;
                }
                sqlcon.DataSource = _cbServidor.SelectedValue.ToString();
                sqlcon.IntegratedSecurity = false;
                sqlcon.InitialCatalog = _cbDataBase.SelectedValue.ToString();

                using (var con = new System.Data.SqlClient.SqlConnection(sqlcon.ConnectionString))
                {
                    // Abrimos la conexión
                    con.Open();
                    MessageBox.Show(@"Coneccion Hecha Con Exito.", Application.ProductName);
                }
            }
            catch (Exception ex)
            {
                var reporter = new ExceptionReporter();
                reporter.ReadConfig();
                reporter.Show(ex);
            }
        }

        private void BntAceptarClick(object sender, EventArgs e)
        {
            try
            {
                var sqlcon = new System.Data.SqlClient.SqlConnectionStringBuilder();
                if (_rbDefaulUser.Checked)
                {
                    sqlcon.UserID = Settings.Default.DbUser;
                    sqlcon.Password = Settings.Default.DbPass;
                }
                else
                {
                    sqlcon.UserID = _txtUsuario.Text;
                    sqlcon.Password = _txtPassword.Text;
                }
                sqlcon.DataSource = _cbServidor.SelectedValue.ToString();
                sqlcon.IntegratedSecurity = false;
                sqlcon.InitialCatalog = _cbDataBase.SelectedValue.ToString();

                using (var con = new System.Data.SqlClient.SqlConnection(sqlcon.ConnectionString))
                {
                    // Abrimos la conexión
                    con.Open();

                    // var entity = new Enti
                }
            }
            catch (Exception ex)
            {
                var reporter = new ExceptionReporter();
                reporter.ReadConfig();
                reporter.Show(ex);
            }
        }

        private void BntVerClick(object sender, EventArgs e)
        {
            _wb.Navigate(_txtDir.Text);

        }

        private void BntSeleccionarClick(object sender, EventArgs e)
        {
            Settings.Default.CredentiaslUrl = _txtDir.Text;
            Settings.Default.Save();
        }
    }
}
